#include "_interpreter.h"
char *callstack_malloc(int length);
inline bool ispair(char *exp);
char *car(char *exp);
char *cdr(char *exp);
char *insert(char *exp, char* element);
char *list(int n, ...);
inline char *cadr(char *exp);
inline char *caddr(char *exp);
inline char *cadddr(char *exp);
bool tag_check(char *e, char *sym);
inline bool isprimitive(char *e);
inline char *make_primitive(char* procedure);
inline char *get_scheme_procedure(char *prim);
inline char *make_compound(char *parameters, char *body, TABLE env);
inline bool iscompound(char *exp);
inline char *parameters(char *compound);
inline char *body(char *compound);
inline char *env(char *compound);
char *map(SINGLE_OPERATOR operator, char *operands,TABLE *env);
char *_apply(char *procedure, char *e1, char *e2);
void make_bindings(char *names, char *values, TABLE *table);
TABLE *extend_env_with_new_frame(char *names, char *values, TABLE env);
char *apply(char *operator, char *operands);
bool isnumber(char *e);
inline bool isdefine(char *e);
bool issymbol(char *e);
inline bool isapplication(char *e);
inline bool islambda(char *e);
TABLE make_table(void);
TABLE table_get(TABLE t, char *key);
void table_put(TABLE *t, char *key, char *value);
char *binding_value(TABLE binding);
char *lookup(char *name, TABLE env);
char *eval_define(char *exp, TABLE *env);
inline bool isif(char *exp);
char *eval_if(char *exp, TABLE *env);
char *eval_lambda(char *exp, TABLE *env);
char *eval(char *exp, TABLE *env);
int main(int argc,char *argv[]);
